Today's computer systems are becoming increasingly sophisticated, permitting users to perform an ever increasing variety of computing tasks at faster and faster rates.
Regardless of the speed of the processor, the storage capacity of the hard drive, the available main memory, and the dazzling features of other hardware, these components are mere paperweights until power is applied and an operating system is loaded to enable use of the system.
At the simplest level, and in the most general sense, the tasks of an operating system fall into specific categories—Process Management, Device Management (including application and user interface management) and Memory Management (including storage).
Memory for a computer system is technically any form of electronic, magnetic or optical storage; however it is generally divided up into different categories based in part upon speed and functionality. Mass storage devices are typically permanent non-volatile memory stores which are generally understood to be cheap, slow, and large capacity devices such as hard drives, tape drives, optical media, and other mass storage devices. The primary object of mass storage devices is to store an application or data until it is required for execution. With low cost and a non-volatile nature, mass storage devices typically provide a computer system with memory stores ranging to the hundreds of gigabytes. These mass storage devices operate with access times generally in excess of 1 millisecond. If the processor had to access such a mass storage device for each and every piece of data needed, the computer system would operate very slowly.
To facilitate quick access for processing, a typical modern computer has a main memory connected by a memory bus directly to the processor. In contrast to the relatively slow storage memory, the main memory is generally comprised of fast, expensive volatile random access memory (RAM), such as DRAM, SDRAM or RDRAM, with access times generally less than 100 nanoseconds. Due to high cost and the volatile nature requiring continuous power, main memory RAM is typically provided in a size range from a few 10's of megabytes to one or two gigabytes. Very fast (frequently less than 10 nanoseconds) and more expensive SRAM is typically used as a small amount of cache memory sitting between the processor and main memory. The size of such fast caches is typically a few 10's of kilobytes to a few megabytes. In more sophisticated systems, several levels of cache memory may be used, each level being of different speed and size.
To be usable by the processor the main memory must be organized. During initialization the operating system will divide the available main memory as reported by the BIOS into standard block sizes, such as for example 2 kilobytes. The applications to be run are then loaded into these fixed block sizes. Traditionally, only the portion of the application required for an immediate operation is loaded into main memory at any given time. As different portions of the application are required for processing, the portion of the active code in the main memory blocks is replaced. The larger the main memory the greater the amount of processing code that may be resident in memory at any one time.
Cycling code in and out of main memory as required by the available space in main memory is a time consuming process and directly affects system performance. However, in general, the processor can only access memory one location at a time, so the vast majority of main memory RAM is unused at any given moment.
As a computer system may be used in a variety of ways the amount of RAM deemed appropriate in one instance may be insufficient or superfluous in another. For example, an image processing and manipulation application may not only be time consuming to initialize for use, but also may require the majority of available main memory RAM resources, while a simple text editor may hardly be noticeable to the system.
RAM is expensive. While a user may indeed power down a computer system and change the size of the RAM to reflect expected needs, it is time consuming and may require special tools and knowledge as well as investment in additional RAM.
To assist with this dilemma, computer systems commonly employ the use of virtual memory—specifically, the operating system designates a portion of the hard drive to act as additional RAM. While this is helpful and cost effective, the slow nature of the hard drive degrades overall system performance and makes this a less than effective solution in many situations.
One feature of virtual memory, and operating systems that support its use, is that virtual memory may be dynamically adjusted during system operation. Commonly, this is a task that is even automated by the operating system in response to the system user initiating multiple memory-intensive applications at the same time. De-allocation may also be performed though it is typically a more involved process.
Beneficial as this process and ability is, the typical speed of a hard drive being approximately 7 milliseconds is thousands of orders of magnitude greater than the typical speed of main memory RAM. Thus, during the allocation or de-allocation process the user must endure a significant pause in the use of the computer system.
Many modern operating systems permit Plug-and-Play devices which are recognized at boot up and automatically configured, and hot-pluggable devices which may be added or removed from the computer system while it is operating.
In some instances the Plug-and-Play or hot-plugged devices may be memory devices such as FLASH cards which may be used as an improvement over the virtual memory provided by a hard drive. However, such devices are still orders of magnitude slower than main memory RAM and thus can not be used to seamlessly augment the size and capability of main memory.
Additionally, main memory is arranged and subdivided by the operating system during the initial load of the operating system. While main memory RAM may be increased or decreased when the system is powered down, current operating systems do not permit main memory RAM to be added or removed during system operation. Doing so inflicts great instability to the operating system and computer system as a whole. Current operating systems do not permit dynamic reallocation of main memory while the system is running.
Further, even if the main memory RAM were removed without critically disabling the computer system, the volatile nature of commonly used RAM dictates that what was held in the RAM prior to removal would be lost immediately upon removal. Thus any desire to share applications between computer systems or store for immediate use at a later date must be made through the use of slow non-volatile memory technologies.
Hence, there is a need for a computer system and operating system which overcomes one or more of the drawbacks identified above. The present invention satisfies one or more of these needs.